namespace NetFx.MSIL
{
  using System;
  using System.Collections.Generic;
  using System.Text;
  using System.Reflection;
  using System.Reflection.Emit;

  public enum ParameterTypeMode
  {
    Unknown = 0x00,
    ByRef = 0x10,
    TypedByRef = 0x16,
  }
  public class ParameterSignature : Signature
  {
    #region Statics
    public static ParameterSignature of(ParameterTypeMode typeMode, TypeSignature type, List<CustomModifierSignature> modifiers)
    {
      return new ParameterSignature(typeMode, type, modifiers);
    }
    #endregion
    #region Fields
    protected ParameterTypeMode typeMode = ParameterTypeMode.Unknown;
    protected TypeSignature type = null;
    protected List<CustomModifierSignature> modifiers = null;
    #endregion
    #region Properties
    public virtual ParameterTypeMode TypeMode
    {
      get
      {
        return this.typeMode;
      }
    }
    public virtual TypeSignature Type
    {
      get
      {
        return this.type;
      }
    }
    public virtual List<CustomModifierSignature> Modifiers
    {
      get
      {
        return this.modifiers;
      }
    }
    #endregion
    #region Constructors
    public ParameterSignature(ParameterTypeMode typeMode, TypeSignature type, List<CustomModifierSignature> modifiers)
    {
      this.typeMode = typeMode;
      this.type = type;
      this.modifiers = modifiers;
    }
    #endregion
  }

}
